#ifndef __STACK_NAMED_H
#define __STACK_NAMED_H
#include "stack.h"

struct stack_named{
    struct stack super;
    const char *p_name;
};

int stack_named_init(struct stack_named *p_stack, int *p_buf, int s32Size, const char * p_name);
int stack_named_set(struct stack_named *p_stack, const char *p_name);
const char * stack_named_get(struct stack_named *p_stack);

int stack_named_deinit(struct stack_named *p_stack);



/* 引入最小知识原则:对一个类的使用者而言，不管你（类）的内部如何复杂和调用者没有关系，我只调用你提供的那些公有方法，其它的一概不管
 * 目前的命名栈对用户使用并不优化，为了使用命名栈(stack_named)还要去了解普通栈(stack)之间的关系
 *
 * 为了满足“最小知识原则”，命名栈也可以提供入栈和出栈的方式，使用户仅需要关心命名栈的公共接口，就可以完成命名栈的所有操作,当然，命令栈 入栈出栈的方式可以直接复用普通栈的入栈出栈方法
 * */

static inline int stack_named_push(struct stack_named *p_stack, int s32Val) //由于函数只有一行代码，所以引入内联函数
{
    return stack_push(&p_stack->super, s32Val);
}

static inline int stack_named_pop(struct stack_named *p_stack, int *p_val)
{
    return stack_pop(&p_stack->super, p_val);
}
#endif
